package com.lin.cloud.disk.manage;

import com.lin.cloud.disk.common.entity.request.AccountRequestDTO;
import com.lin.cloud.disk.entity.request.directory.MoveDirectoryRequest;
import com.lin.cloud.disk.entity.request.directory.RestoreDirectoryRequest;
import com.lin.cloud.disk.entity.request.file.*;
import com.lin.cloud.disk.entity.response.*;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * @program: cloud-disk
 * @description: 文件管理服务类
 * @author: Lin
 * @create: 2021-01-15 15:05
 **/
public interface IFileManageService {


    /**
     * 获取预上传的链接
     */
    GetPreUploadUrlResponse getPreUploadUrl(GetPreUploadUrlRequest request);
    /**
     * 获取上传地址列表
     * @param request
     * @return
     */
    GetMultipartUploadUrlResponse getMultipartUploadUrl(GetMultipartUploadUrlRequest request);

    /**
     * 获取上传地址
     * @param request
     * @return
     */
    GetUploadUrlResponse getUploadUrl(GetUploadUrlRequest request);

    /**
     * 上传完成后 合并多个文件
     * @param request
     */
    void mergeFilePart(MergeFilePartRequest request);


    /**
     * 逻辑删除文件
     * @param request
     */
    void logicRemoveFile(RemoveFileRequest request);

    /**
     * 物理删除文件
     * @param request
     */
    void physicalRemoveFile(RemoveFileRequest request);


    /**
     * 获取直链下载链接 7天限制
     * @param request
     * @return
     */
    GetFileUrlResponse getStraightDownloadUrl(GetStraightDownloadUrlRequest request);



    /**
     * 获取文件存储日期报表
     * @param requestDTO
     * @return
     */
    List<GetFileStoreDateTableResponse> getFileStoreDateTable(GetFileStoreDateTableRequest requestDTO);


    /**
     * 逻辑恢复文件
     * @param request
     */
    void logicRestoreFile(RestoreDirectoryRequest request);

    /**
     * 获取文件地址
     * @param request
     * @return
     */
    GetFileUrlResponse getFileUrl(GetFileUrlRequest request);

    /**
     * 修改文件名字
     * @param request
     */
    void updateFileName(UpdateFileNameRequest request);

    /**
     * 移动文件
     * @param request
     */
    void moveFile(MoveFileRequest request);


    /**
     * 上传图片
     * @param file
     * @return
     */
    UploadImgResponse uploadImg(MultipartFile file);
}
